package com.aidex.biz.service.impl;

import com.aidex.biz.domain.Taizhang002;
import com.aidex.biz.mapper.Taizhang002Mapper;
import com.aidex.biz.service.Taizhang002Service;
import com.aidex.common.annotation.DataScope;
import com.aidex.common.core.service.BaseServiceImpl;
import com.aidex.common.exception.CustomException;
import com.aidex.common.utils.NumberUtils;
import com.aidex.common.utils.SecurityUtils;
import com.aidex.common.utils.StringUtils;
import com.github.pagehelper.PageInfo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * 重要子公司基本情况Service业务层处理
 *
 * @author sean
 * @email 2074844820@qq.com
 * @date 2025-05-22
 */
@Service
@Transactional(readOnly = true)
public class Taizhang002ServiceImpl extends BaseServiceImpl<Taizhang002Mapper, Taizhang002> implements Taizhang002Service {
    private static final Logger log = LoggerFactory.getLogger(Taizhang002ServiceImpl.class);

    /**
     * 获取单条数据
     *
     * @param taizhang002 重要子公司基本情况
     * @return 重要子公司基本情况
     */
    @Override
    public Taizhang002 get(Taizhang002 taizhang002) {
        Taizhang002 dto = super.get(taizhang002);
        return dto;
    }

    /**
     * 获取单条数据
     *
     * @param id 重要子公司基本情况id
     * @return 重要子公司基本情况
     */
    @Override
    public Taizhang002 get(String id) {
        Taizhang002 dto = super.get(id);
        return dto;
    }


    /**
     * 查询重要子公司基本情况列表
     *
     * @param taizhang002 重要子公司基本情况
     * @return 重要子公司基本情况
     */
    @Override
    @DataScope(userAlias = "a", deptAlias = "a")
    public List<Taizhang002> findList(Taizhang002 taizhang002) {
        return super.findList(taizhang002);
    }

    /**
     * 分页查询重要子公司基本情况列表
     *
     * @param taizhang002 重要子公司基本情况
     * @return 重要子公司基本情况
     */
    @Override
    @DataScope(userAlias = "a", deptAlias = "a")
    public PageInfo<Taizhang002> findPage(Taizhang002 taizhang002) {
        return super.findPage(taizhang002);
    }

    /**
     * 保存重要子公司基本情况
     *
     * @param taizhang002
     * @return 结果
     */
    @Override
    public boolean save(Taizhang002 taizhang002) {
        return super.save(taizhang002);
    }


    @Override
    @Transactional(readOnly = false)
    public String importData(List<Taizhang002> taizhang002s) {
        if (StringUtils.isNull(taizhang002s) || taizhang002s.size() == 0) {
            throw new CustomException("导入数据不能为空！");
        }
        int successNum = 0;
        int failureNum = 0;
        int updateNum = 0;
        StringBuilder successMsg = new StringBuilder();
        StringBuilder failureMsg = new StringBuilder();
        for (Taizhang002 obj : taizhang002s) {
            try {


                if (StringUtils.isNotNull(obj.getCompanyName())) {
                    Taizhang002 taizhang002 = this.get(obj.getCompanyNo());
                    obj.setId(obj.getCompanyNo());
                    if (taizhang002 != null) {
                        this.save(obj);
                        updateNum++;
                    } else {
                        obj.setDeptId(SecurityUtils.getDeptId());
                        obj.setIsNewRecord();
                        this.save(obj);
                        successNum++;
                    }

                }
            } catch (Exception e) {
                failureNum++;
                String msg = failureNum + "";
                log.error(msg, e);
            }
        }
        if (failureNum > 0) {
            failureMsg.insert(0, "很抱歉，导入失败！共 " + failureNum + " 条数据格式不正确。");
            throw new CustomException(failureMsg.toString());
        } else {
            successMsg.insert(0, "数据已全部导入成功！新增数据 " + successNum + " 条,修改数据：" + updateNum + " 条");
        }
        return successMsg.toString();

    }

    /**
     * 删除重要子公司基本情况信息
     *
     * @param taizhang002
     * @return 结果
     */
    @Override
    public boolean remove(Taizhang002 taizhang002) {
        return super.remove(taizhang002);
    }

    /**
     * 批量删除重要子公司基本情况
     *
     * @param ids 需要删除的重要子公司基本情况ID
     * @return 结果
     */
    @Transactional(readOnly = false)
    @Override
    public int deleteTaizhang002ByIds(String[] ids) {
        return mapper.deleteTaizhang002ByIds(ids);
    }

    /**
     * 获取最大编号
     *
     * @param taizhang002 重要子公司基本情况
     * @return 结果
     */
    @Override
    public int findMaxSort(Taizhang002 taizhang002) {
        return NumberUtils.nextOrder(mapper.findMaxSort(taizhang002));
    }
}
